《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 1.5 单例模式

简介:

本节书摘来自华章出版社《Python编程实战:运用设计模式、并发和程序库创建高质量程序》一 书中的第1章,第1.1节,作者:(美) Mark Summerfield,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 单例模式

在整个程序运行过程中,如果某个类只应该有一个实例,那么可通过单例模式来保证。
有些面向对象编程语言很难创建单例,但在Python语言中却非常简单。Python Cookbook(code.activestate.com/recipes/langs/python/)提供了非常易用的Singleton类,只要继承它,就会成为单例。此外还提供了Borg类,可以用另一种方式实现单例效果。
然而在Python中实现单例最为简单的办法是:创建模块时,把全局状态放在私有变量中,并提供用于访问此变量的公开函数。比方说,在第7章的currency范例中,我们要创建一个函数,令其返回含有货币汇率的字典(该字典以货币名称为键,以汇率为值)。这个函数可能会调用很多次,但大部分情况下,汇率数据只获取一次就够了,无须每次调用时都获取一遍。此需求可以通过单例模式来实现。
screenshot

这段代码节选自currency/Rates.py模块(与往常一样,节选代码时也略去了import语句)。我们创建了名为rates的字典,用于保存私有数据,并将该字典设置成Rates.get()函数的属性。第一次执行公开的get()函数时(或者以refresh=True为参数调用时),会下载全新的汇率数据;其他时候只需把最近下载的那份数据返回就行了。尽管没有引入类,但我们依然把汇率数据做成了“单例数据值”(singleton data value),若要添加其他单例值,亦可仿照此法。
创建型设计模式在Python语言中都很容易实现。单例模式可以直接用模块来实现,而原型模式则显得多余,尽管也可以通过copy模块来实现,但Python语言能够动态访问类对象,所以没必要那么做。最有用的创建型设计模式是抽象工厂模式、工厂方法模式与建造者模式,它们的实现方式有很多种。创建好基本的对象之后,一般需要通过组合或适配来创建更为复杂的对象。下一章就来谈谈这个问题。

相关文章
|
15天前
|
设计模式 安全 Java
【设计模式系列笔记】单例模式
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点,以便全局范围内访问这个实例。单例模式的目标是限制一个类的实例化,确保在整个应用程序中只有一个实例存在,并提供对这个唯一实例的全局访问点。这对于控制对资源的访问、限制特定类的实例数量等场景非常有用。
121 5
|
9天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
3天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
11 4
|
5天前
|
Python
简单的 Python 计算器程序
这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
16 3
|
6天前
|
设计模式 安全 Java
【设计模式学习】单例模式和工厂模式
【设计模式学习】单例模式和工厂模式
|
7天前
|
设计模式 安全 Java
|
8天前
|
监控 测试技术 API
Python Web应用程序构建
【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
17 4
|
8天前
|
设计模式 存储 安全
Java 设计模式:深入单例模式的理解与应用
【4月更文挑战第27天】单例模式是一种常用的设计模式,在 Java 开发中扮演着重要角色。此模式的主要目的是保证一个类只有一个实例,并提供一个全局访问点。
16 0
|
10天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
9 3
|
12天前
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~创建型] 确保对象的唯一性~单例模式
[设计模式Java实现附plantuml源码~创建型] 确保对象的唯一性~单例模式